www.gusucode.com > (自适应手机版)响应式餐饮美食企业网站源码 餐饮品牌连锁机构织梦模板(demo292)源码程序 > (自适应手机版)响应式餐饮美食企业网站源码 餐饮品牌连锁机构织梦模板(demo292)源码程序/www3/style/js/supposition.js

    /*






 * Supposition v0.2 - an optional enhancer for Superfish jQuery menu widget.






 *






 * Copyright (c) 2008 Joel Birch - based mostly on work by Jesse Klaasse and credit goes largely to him.






 * Special thanks to Karl Swedberg for valuable input.






 *






 * Dual licensed under the MIT and GPL licenses:






 *  http://www.opensource.org/licenses/mit-license.php






 *  http://www.gnu.org/licenses/gpl.html






 */






/*






 * This is not the original jQuery Supposition plugin.






 * Please refer to the README for more information.






 */













(function($){






  $.fn.supposition = function(){






    var $w = $(window), /*do this once instead of every onBeforeShow call*/






    _offset = function(dir) {






      return window[dir == 'y' ? 'pageYOffset' : 'pageXOffset']






      || document.documentElement && document.documentElement[dir=='y' ? 'scrollTop' : 'scrollLeft']






      || document.body[dir=='y' ? 'scrollTop' : 'scrollLeft'];






    },






    onHide = function(){






      this.css({bottom:''});






    },






    onBeforeShow = function(){






      this.each(function(){






        var $u = $(this);






        $u.css('display','block');






        var $mul = $u.closest('.sf-menu'),






        level = $u.parents('ul').length,






        menuWidth = $u.width(),






        menuParentWidth = $u.closest('li').outerWidth(true),






        menuParentLeft = $u.closest('li').offset().left,






        totalRight = $w.width() + _offset('x'),






        menuRight = $u.offset().left + menuWidth,






        exactMenuWidth = (menuRight > (menuParentWidth + menuParentLeft)) ? menuWidth - (menuRight - (menuParentWidth + menuParentLeft)) : menuWidth;






        if ($u.parents('.sf-js-enabled').hasClass('rtl')) {






          if (menuParentLeft < exactMenuWidth) {






            if (($mul.hasClass('sf-horizontal') && level == 1) || ($mul.hasClass('sf-navbar') && level == 2)){






              $u.css({left:0,right:'auto'});






            }






            else {






              $u.css({left:menuParentWidth + 'px',right:'auto'});






            }






          }






        }






        else {






          if (menuRight > totalRight && menuParentLeft > menuWidth) {






            if (($mul.hasClass('sf-horizontal') && level == 1) || ($mul.hasClass('sf-navbar') && level == 2)){






              $u.css({right:0,left:'auto'});






            }






            else {






              $u.css({right:menuParentWidth + 'px',left:'auto'});






            }






          }






        }






        var windowHeight = $w.height(),






        offsetTop = $u.offset().top,






        menuParentShadow = ($mul.hasClass('sf-shadow') && $u.css('padding-bottom').length > 0) ? parseInt($u.css('padding-bottom').slice(0,-2)) : 0,






        menuParentHeight = ($mul.hasClass('sf-vertical')) ? '-' + menuParentShadow : $u.parent().outerHeight(true) - menuParentShadow,






        menuHeight = $u.height(),






        baseline = windowHeight + _offset('y');






        var expandUp = ((offsetTop + menuHeight > baseline) && (offsetTop > menuHeight));






        if (expandUp) {






          $u.css({bottom:menuParentHeight + 'px',top:'auto'});






        }






        $u.css('display','none');






      });






    };













    return this.each(function() {






      var o = $.fn.superfish.o[this.serial]; /* get this menu's options */













      /* if callbacks already set, store them */






      var _onBeforeShow = o.onBeforeShow,






      _onHide = o.onHide;













      $.extend($.fn.superfish.o[this.serial],{






        onBeforeShow: function() {






          onBeforeShow.call(this); /* fire our Supposition callback */






          _onBeforeShow.call(this); /* fire stored callbacks */






        },






        onHide: function() {






          onHide.call(this); /* fire our Supposition callback */






          _onHide.call(this); /* fire stored callbacks */






        }






      });






    });






  };






})(jQuery);